/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tiposgenericos;

/**
 *
 * @author Miguel
 */
public class CListaNodo implements Comparable<CListaNodo>{
    private CNodo start; // Primer nodo de la lista
    /**
    * Añade un nodo al final de la lista.
    */
     public void AgregarNodo(String N){ 

        CNodo aux = start;

        // Si la lista esta completamente vacia
         if(aux == null){ 
            // Creamos el primer elemento
            //aux = new CNodo(N); 
             start = new CNodo(N); 

        }
        else
        { 
            // En caso contrario buscamos el ultimo y lo añadimos
            while(aux.next!=null) aux=aux.next; 

            aux.next=new CNodo(N); 
        }
    }
     
    /**
    * Borra el primer nodo cuyo dato coincida con el parametro N 
    */
    public void Eliminar(String N){ 

        CNodo aux = start; 

        // Comprobamos si es el primer nodo
         if(aux.dato == N){ 
        // Si lo es entonces hacemos que el primer nodo sea el segundo
         start = aux.next; 

        }else{ 
        // Vamos saltando los nodos que no coincidan hasta 
        // que encontremos uno o se acabe la lista
         while(aux.next!=null && aux.next.dato!=N) 

        aux = aux.next; 
        // Si la lista no ha acabado
         if(aux.next!=null){ 
            // saltamos al siguiente
             aux.next = aux.next.next; 
            } 
        }
    }
    
    public int ContarNodos(){
        CNodo aux = start;

        // Si la lista esta completamente vacia
         if(aux == null){             
            return 0;
        }
        else
        { 
            int c = 1;            
            while(aux.next!=null){
                c++;
                aux=aux.next;
            } 
            return c;            
        }
    }
    
    public String[] ListarNodos(){ 

        CNodo aux = start;
        int NroNodos = ContarNodos();
        String[] arreglo = new String[NroNodos];
        // Si la lista esta completamente vacia
         if(NroNodos == 0){             
            arreglo[0] = "No hay elementos";
            return arreglo;
        }
        else
        { 
            int i = 0;            
            arreglo[i] = start.dato;
            while(aux.next!=null)
            {
                i++;
                aux=aux.next;
                arreglo[i] = aux.dato;                
            }             
        }
        return arreglo;
    }
    
     @Override
     public int compareTo(CListaNodo o) {        
        return o.start.compareTo(start);         
    }    
    
}
